// Copyright © SixtyFPS GmbH <info@slint-ui.com>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-commercial

import { Theme } from "theme.slint";

export component Carousel inherits FocusScope {
    callback move-right();
    callback move-left();
    callback move-focus-up();

    in-out property <int> selected-index;
    in property <length> spacing;
    in property <length> itemWidth;
    in property <int> count: 0;
    private property <length> center-x: (root.width - Theme.size-big) / 2;
    private property <duration> duation: Theme.duration-regular;

    forward-focus: focus-scope;
    height: Theme.size-big;

    move-right => {
        root.selected-index = min(root.selected-index + 1, root.count - 1);
    }

    move-left => {
        root.selected-index = max(root.selected-index - 1, 0);
    }

    focus-scope:= FocusScope {
        key-pressed(event) => {
            if(event.text == Key.UpArrow) {
                root.move-focus-up();
                return accept;
            }

            if(event.text == Key.RightArrow) {
                root.move-right();
                return accept;
            }

            if(event.text == Key.LeftArrow) {
                root.move-left();
                return accept;
            }

            return accept;
        }
    }

    TouchArea {
        width: parent.width;
        height: parent.height;

        clicked => {
            focus-scope.focus()
        }
     }


    Rectangle {
        clip: true;
        background: transparent;

        Flickable {
            interactive: false;
            animate viewport-x { duration: root.duation; easing: ease-in; }
            viewport-x: root.center-x - root.selected-index * (root.itemWidth + root.spacing);

            HorizontalLayout {
                spacing <=> root.spacing;

                @children
            }
        }
    }
}